package dyyx;

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.Jedis;

public class ScriptTest {
	
	
	private static final String FILE = "/Users/dugang/work/redisdemo/script/test.lua";
	
	public static void main(String[] args) throws Exception {	
		System.out.println("hello,ScriptTest");
		Jedis jedis = new Jedis("127.0.0.1");
		System.out.println(jedis.info());
		
		String key = "scriptTestKey";

		
		String script = "return redis.call('get',KEYS[1])";
		List<String> keys = new ArrayList<String>();
		keys.add(key);
		List<String> params = new ArrayList<String>();

		// 直接执行脚本
		// params 不能为 Null ，会 空指针
		Object result = jedis.eval(script,keys,params);
		
	    System.out.println("eval.result="+result);

        // 读取脚本内容
	    script = new String(Utils.readBytes(FILE));
	    // 加载脚本到缓存 
	    String sha = jedis.scriptLoad(script);
	    
	    // fac8c1886f2fe23364cce40d2cdb50a2cfea7cd9
	    System.out.println("sha ="+sha);
	    
	    // 指定脚本是否存在
	    System.out.println("exist="+jedis.scriptExists(sha));

	    // 再次加载脚本，得到同样的返回值
        String sha2 = jedis.scriptLoad(script);
        
	    
	    System.out.println("sha2="+sha2);
	    
	    // Redis Script Flush 命令用于清除所有 Lua 脚本缓存。
	    // jedis.scriptFlush();
	    //  redis.clients.jedis.exceptions.JedisNoScriptException: NOSCRIPT No matching script. Please use EVAL.
		// 执行脚本 
	    result = jedis.evalsha(sha,1,key);
		
	    System.out.println("evalsha.result="+result);

	    String str = jedis.get(key);
		
	    System.out.println("str="+str);

			
		jedis.close();
		
	}	
	
}
